package com.bgds.sys.module.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.bgds.sys.common.pagevo.PageVo;
import com.bgds.sys.module.entity.dto.AlarmDeviceDto;
import com.bgds.sys.module.entity.AlarmLog;
import com.bgds.sys.module.entity.dto.AlarmInfo;
import com.bgds.sys.module.entity.dto.AlarmLogDto;

import java.util.List;
import java.util.Map;

/**
 * @author lj
 * 报警日志业务接口
 */
public interface IAlarmLogService extends IService<AlarmLog> {


    IPage<AlarmLogDto> queryForPage(Long startTime, Long endTime, Integer state, String deviceName, String attrName, Integer alarmLevel, PageVo page);
    /**
     * 分页查询报警日志
     * @param startTime 起始时间
     * @param endTime 结束时间
     * @param status 状态
     * @param page 分页参数
     * @return
     */
    IPage<AlarmLogDto> listByParam( Long startTime, Long endTime, Integer status, PageVo page);
    /**
     * 时间段查询报警日志
     * @param deviceCode 设备编码
     * @param startTime 起始时间
     * @param endTime 结束时间
     * @return
     */
    List<AlarmLogDto> listByParam(String deviceCode,Long startTime, Long endTime);

    /**
     * 统计两个小时的报警次数
     * @param startTime 起始时间
     * @param endTime 结束时间

     * @return
     */
    Integer count2Hour(String startTime,String endTime);

    /**
     * 获取最近两个小时报警信息
     * @return
     */
    IPage<AlarmLogDto> nearest2HourAlarmLog(Integer pageNumber,Integer pageSize);

    /**
     * 获取最近两个小时报警设备
     * @return
     */
    List<AlarmDeviceDto> nearest2HourAlarmDevices();

    /**
     * 最新报警日志信息
     * @return
     */
    AlarmInfo getMaxAlarmTime();






    /**
     * 获取为处理日志
     * @return
     */
    List<AlarmLog> unhandleLog();

    /**
     * 批量插入报警日志
     * @param alarmLogs
     */
    void saveAlarmLogs(Map<String, List<AlarmLog>> alarmLogs);

    /**
     * 批量插入非报警日志
     * @param notAlarmLog
     */
    void handleNotAlarmLogs(List<AlarmLog> notAlarmLog);
    /**
     * 设备编码获取报警日志
     * @param deviceCode
     * @return
     */
    List<AlarmLog>  listByDeviceCode(String deviceCode);

    /**
     * 判断设备报警 状态0: 正常1: 报警 2: 异常
     * @param deviceCode
     * @return
     */
    Integer decideDeviceLevel(String deviceCode);

    List<AlarmLog> findByAttrId(Long attrId);

    List<AlarmLog> findBatchByAttrIds(List<Long> attrIds);





}
